<template>
  <div class="my-tag">
    <input
      class="input"
      type="text"
      placeholder="输入标签"
      v-if="isShow"
      v-focus
      @blur="isShow=false"
      v-model="inputTag"
      @keydown.enter="changeTag"
    />
    <div v-else @dblclick="show" class="text">{{value}}</div>
  </div>
</template>
v-model 就是帮我们简化了俩件事 :value   input事件
 1.父组件里绑定v-mode把item.tag传给子组件
 2. 子组件中渲染
 3.由于是父组件传递过来的是单向数据流，所有不能直接修改value
  需要定一个变量接收用户输入的数据
4.在通过keydown事件按enter触发函数处理把值传递给父组件，隐藏盒子   子传父
5.input事件 触发会自动赋值给item.tag
6.再通过双击事件把修改过来的值通过父组件item.tag传给子组件value赋值给inputTag实现数据回显
<script>
export default {
  props:{
      value:{
        type:String,
        required:true
      }
  },
  name: 'MyTag',

  data() {
    return {
      isShow:false,
      inputTag:''
    }
  },
  methods:{
    changeTag(){
      this.$emit('input',this.inputTag)
      this.isShow=false
    },
    show(){
      this.inputTag=this.value
      this.isShow=true
    }
  }
}
</script>

<style lang="less" scoped>
// yarn add less less-loader -D
.my-tag {
  cursor: pointer;
  .input {
    appearance: none;
    outline: none;
    border: 1px solid #ccc;
    width: 100px;
    height: 40px;
    box-sizing: border-box;
    padding: 10px;
    color: #666;
    &::placeholder {
      color: #666;
    }
  }
}
</style>